﻿using System;
using System.Data;
using System.Data.Objects;
using System.Data.SqlClient;
using System.Data.Objects.DataClasses;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RR
{
    public partial class RegistRar : ObjectContext
    {
        /// <summary>
        /// Формирует накладные перемещения в архив на основани допсоглашения к договору.
        /// </summary>
        /// <param name="DogDop">Дополнительное соглашение</param>
        /// <param name="DocumDate">Дата накладной</param>
        /// <param name="Operator">Код оператора</param>
        /// <param name="Worker">Код сотрудника</param>
        /// <param name="Note">Примечания к накладной</param>
        public void MakeOrderDoc(Int32 DogDop, DateTime DocumDate, Int32 Operator, Int32 Worker, string Note)
        {
            string Cmd = string.Format("execute procedure MakeOrderDoc({0},'{1:d}',{2},{3},'{4}')",
                DogDop, DocumDate, Operator, Worker, Note);
            ExecuteStoreCommand(Cmd, null);
        }
        
        public void SetDogDopArcPlace(Int32 DogDop, bool IsAll)
        {
            string All = "0";
            if (IsAll) All = "1";
            string Cmd = string.Format("execute procedure SetDogDopArcPlace({0},{1})", DogDop, All);
            ExecuteStoreCommand(Cmd, null);
        }

        /// <summary>
        /// Снимает привязку к папкам в допсоглашении
        /// </summary>
        /// <param name="DogDop"> Код допсоглашения</param>
        public void CleadArcPlace(Int32 DogDop)
        {
            string Cmd = string.Format("execute procedure ClearArcPlace({0})",DogDop);
            ExecuteStoreCommand(Cmd, null);
        }
    }

    public partial class MENURIGHT : EntityObject
    {
        /// <summary>
        /// Установка прав доступа к пункту главного меню
        /// </summary>
        /// <param name="context">Контекст сущностей RegistRar</param>
        /// <param name="WorkerState">Код роли доступа</param>
        /// <param name="MenuID">Код пункта меню</param>
        /// <param name="Flag">Флаг доступа к пункту меню</param>
        public static void SetMenuRight(RegistRar context, int WorkerState, int MenuID, bool Flag)
        {
            int IntFlag = 0;
            if (Flag) IntFlag = 1;
            string Query = string.Format("execute procedure SetMenuRight({0},{1},{2})",
                WorkerState, MenuID, IntFlag);
            context.ExecuteStoreCommand(Query, null);
        }
    }

    public partial class ARCRACK : EntityObject
    {
        /// <summary>
        /// Создает в базе данных новый стеллаж. Запись о стеллаже вносится в таблицу ArcRack,
        /// при этом генерируется полный список папок для данного стеллажа с привязкой к полке и коробке.
        /// </summary>
        /// <param name="context">Контекст сущностей RegistRar</param>
        /// <param name="Room">Код помещения в котором создается стеллаж</param>
        /// <param name="Nomer">Номер стеллажа</param>
        /// <param name="ShelfCount">Количество полок на стеллаже</param>
        /// <param name="CellCount">Количество коробок на полке</param>
        /// <param name="PlaceCount">Количество папок в каждой коробке</param>
        public static void CreateARCRACK(RegistRar context, int Room, short Nomer, short ShelfCount,
            short CellCount, short PlaceCount)
        {
            string Query = string.Format("execute procedure AddArcRack({0},{1},{2},{3},{4})",
                Room, Nomer, ShelfCount, CellCount, PlaceCount);
            context.ExecuteStoreCommand(Query, null);
            context.SaveChanges();
        }
        /// <summary>
        /// Возвращает true, если существует стеллаж с указанным номером
        /// </summary>
        /// <param name="context">Контекст сущностей RegistRar</param>
        /// <param name="Room">Код помещения, в котором установлен стеллаж</param>
        /// <param name="Nomer">Номер стеллажа</param>
        /// <returns></returns>
        public static bool RackExists(RegistRar context, int Room, int Nomer)
        {
            int i = (from st in context.ARCRACK where st.ARCROOM == Room && st.NOMER==Nomer select st).Count();
            return i != 0;
        }
    }

}
